package com.ht.api.db.task;

import java.util.ArrayList;
import java.util.List;

import com.ht.api.db.Entity;
import com.ht.api.db.util.RedisUtil;

import cn.hutool.json.JSONObject;

/**
 * 任务基类：将数据列表写入缓存
 * @author asq
 * @createTime 2025年3月7日 12:52:03
 */
public abstract class DataToCacheTask implements TaskHandler{

	@Override
	public final boolean handler(JSONObject param, String groupId, long taskId) {
		// 获取租户ID
		long tenantId = param.getLong("tenant_id");
		RedisUtil.set("taskgroup:tenant:" + groupId, tenantId);
        
        // 不再直接写数据库，先写入缓存，待所有任务完成后，在回调方法中再一次性写入数据库，提高性能
        List<Entity> dataList = getDbList(param, groupId, taskId);
        if (dataList != null && !dataList.isEmpty()) {
			ArrayList<Entity> dbList = new ArrayList<>(dataList);
	        RedisUtil.hset("taskgroup:data:" + groupId, taskId + "", dbList);
        }

        // true:执行成功；false：执行失败
		return true;
	}
	
	/**
	 * 具体的任务实现
	 * @param param 任务参数
	 * @param groupId 任务组ID
	 * @param taskId 任务ID
	 * @return 返回需写入数据库的数据列表
	 */
	protected abstract List<Entity> getDbList(JSONObject param, String groupId, long taskId);
}
